#define _USE_MATH_DEFINES #include <math.h> #include "graphics.h" double xmin, xmax, ymin, ymax; //глобальные - диапазон логических координат //Для преобразования X из интервала [a,b] -> [c,d] делаем (X-a)/(b-a)*(d-c)+c. //Создаем пару функций: sx(x) и sy(y) double sx(double x) { return (x-xmin)/(xmax-xmin)*getmaxx(); } double sy(double y) { return getmaxy()-(y-ymin)/(ymax-ymin)*getmaxy(); //'Y вверх ногами, поэтому getmaxy()-... } //"любая" функция. Можете подставить любую другую double f(double x) { return 1.5*x*x-2*sin(5*x); } int main(void) { initwindow(400, 300); /* график */ //f(x)=1.5*x*x-2*sin(5*x), x в [-2,3] double x, y; int nPoints; double dx; xmin=-2; xmax=3; nPoints=getmaxx(); //Максимальное число точек по X dx=(xmax-xmin)/nPoints; //шаг в логических координатах //Для определения ymin, ymax нужен цикл ymin=f(xmin); ymax=ymin; for (x=xmin; x<=xmax; x+=dx) { y=f(x); if (ymin > y) ymin = y; if (ymax < y) ymax = y; } //Рисуем график. Цикл такой же //Включаем красный, жирный (3 пиксела) setcolor(RED); setlinestyle(SOLID_LINE, 0, THICK_WIDTH); y=f(xmin); moveto(sx(xmin), sy(y)); //установка первой точки for (x=xmin; x<=xmax; x+=dx) { y=f(x); lineto(sx(x), sy(y)); //соединяем точки } //Включаем обратно белый, нормальный (1 пиксел) setcolor(WHITE); setlinestyle(SOLID_LINE, 0, NORM_WIDTH); //Добавим оси line(sx(xmin), sy(0), sx(xmax), sy(0)); line(sx(0), sy(ymin), sx(0), sy(ymax)); //подписи outtextxy(sx(0)+5, sy(0)+2, "0,0"); outtextxy(sx(xmax)-20, sy(0)+2, "X"); outtextxy(sx(0)+5, sy(ymax)+10, "Y"); getch(); closegraph(); return 0; }
You need to enable Javascript in your browser to edit pages.
help on how to format text
Программа построения графика функции
к статье Построение графика функции на С с пользованием библиотеки WinBGIm